package com.example;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zhangs
 * @version v1.0
 * @decription
 * @date 2021/4/7 19:40
 **/
public class Gen<E> {
    public static void main(String[] args) {
        /*原始类型不具备类型安全性*/
        //创建一个String类型的List
        List<String> strings = new ArrayList<>();
        //使用非安全的方法往List中添加元素
        //不会进行类型检查，编译通过
        unsafe(strings, 18);
        //获取刚刚插入的元素
        //运行时抛出java.lang.ClassCastException异常
        String s = strings.get(0);

        /*参数化类型具备类型安全性*/
        List<String> list2 = new ArrayList<>();

        //编译错误，抛出异常
        //java: 不兼容的类型
        //java.util.List<java.lang.String>无法转换为java.util.List<java.lang.Object>
//        safe(list2, 18);
    }

    private static void unsafe(List list, Object o) {
        // 由于传入的是原始类型，因此接受各种类型的对象
        list.add(o);
    }

    private static void safe(List<Object> list, Object o) {
        list.add(o);
    }
}
